package com.wryyyyy.controller;

import cn.hutool.core.bean.BeanUtil;
import com.wryyyyy.dto.LoginFormDTO;
import com.wryyyyy.dto.Result;
import com.wryyyyy.dto.UserDTO;
import com.wryyyyy.dto.UserInfoDTO;
import com.wryyyyy.entity.User;
import com.wryyyyy.service.IUserService;
import com.wryyyyy.utils.UserHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;


/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wryyyyy
 * @since 2023-11-12
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private IUserService userService;


    /**
     * 发送手机验证码
     */
    @PostMapping("/code")
    public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
        // 发送短信验证码并保存验证码
        return userService.sendCode(phone,session);
    }

    /**
     * 注册功能
     * @param loginForm 登录参数，包含手机号、验证码、密码
     */
    @PostMapping("/register")
    public Result register(@RequestBody LoginFormDTO loginForm, HttpSession session) {
        return userService.register(loginForm, session);
    }

    /**
     * 登录功能
     * @param loginForm 登录参数，包含手机号、验证码；或者手机号、密码
     */
    @PostMapping("/login")
    public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session) {
        //实现登录功能
        return userService.login(loginForm,session);
    }

    /**
     * 设置密码
     */
    @PutMapping("/setPassword")
    public Result setPassword(@RequestParam("password") String password) {
        UserDTO user = UserHolder.getUser();
        return userService.setPassword(user.getId(), password);
    }

    /**
     * 密码登录
     */
    @PostMapping("/loginPwd")
    public Result loginPwd(@RequestBody LoginFormDTO loginForm, HttpSession session) {
        //实现登录功能
        return userService.loginPwd(loginForm,session);
    }

    /**
     * 登出功能
     * @return 无
     */
    @PostMapping("/logout")
    public Result logout() {
        // TODO 登出 用户id不是从前面过来的，而是从用户线程中获得的
        return Result.fail("功能未完成");
    }

    @PutMapping("/updatepwd")
    public Result updatepwd() {
        // TODO 修改用户密码 用户id不是从前面过来的，而是从用户线程中获得的
        return Result.fail("功能未完成");
    }

    @PutMapping("/editor")
    public Result editor() {
        // TODO 编辑个人信息 用户id不是从前面过来的，而是从用户线程中获得的
        return Result.fail("功能未完成");
    }

    /**
     * 获取当前登录的用户
     * @return 用户dto
     */
    @GetMapping("/me")
    public Result me() {
        //获取当前登录的用户并返回
        UserDTO user = UserHolder.getUser();//拦截器已经把对象放在UserHolder里面了
        if (user != null) {
            return Result.ok(userService.getById(user.getId()));
        }
        else {
            return Result.fail("用户未登录");
        }
    }

    /**
     * 查看用户个人信息
     * @param userId 用户id
     * @return 个人信息
     */
    @GetMapping("/info/{id}")
    public Result info(@PathVariable("id") String userId) {
        // 查询详情
        User user = userService.getById(userId);
        UserInfoDTO info = BeanUtil.copyProperties(user,UserInfoDTO.class);
        return Result.ok(info);
    }

    /**
     * 上传用户头像
     * @param file 图片文件
     * @return 图片路径
     */
    @PostMapping("/upload")
    public Result uploadAvatar(@RequestParam("file") MultipartFile file) {
//        String imgName = fileLoad.uploadOneImage(USER_IMAGE_PATH, file);
//        if (imgName == null) {
//            return Result.fail("上传失败");
//        }
//        return Result.ok(USER_IMAGE_PATH + imgName);
        return Result.ok();
    }

    /**
     * 修改用户信息
     * @param user 用户信息
     * @return 修改成功
     */
    @PutMapping("/update")
    public Result update(@RequestBody User user) {
        return Result.ok(userService.updateById(user));
    }
}
